/**
 * 
 */
package br.com.skynix.tcmc.service.seguranca.usuarios;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import br.com.skynix.tcmc.base.excecao.LabelsSistema;
import br.com.skynix.tcmc.base.excecao.MensagemErro;
import br.com.skynix.tcmc.base.excecao.MensagensSistema;
import br.com.skynix.tcmc.base.spring.AbstractServiceImpl;
import br.com.skynix.tcmc.model.seguranca.Usuario;

/**
 * @author mgrb
 * 
 */
@Service
public class UsuarioServiceImpl extends AbstractServiceImpl<Usuario> implements
		UsuarioService {

	@Autowired
	private UsuarioDao usuarioDao;

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.com.skynix.tcmc.base.AbstractService#getDao()
	 */
	@Override
	protected UsuarioDao getDao() {
		return usuarioDao;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.service.usuario.UsuarioService#isCredentialValid(br
	 * .com.skynix.tcmc.model.Usuario)
	 */
	@Override
	public boolean isCredentialValid(Usuario usuario) {
		return usuarioDao.isCredentialValid(usuario);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.spring.AbstractServiceImpl#validarInserirAlterar
	 * (br.com.skynix.tcmc.base.model.EntidadeAuditavel)
	 */
	@Override
	protected List<MensagemErro> validarInserirAlterar(Usuario entidade) {
		List<MensagemErro> erros = super.validarInserirAlterar(entidade);

		if (entidade.getFuncionario() == null) {
			erros.add(new MensagemErro(
					MensagensSistema.ERRO_MSG_GERAL_CAMPO_OBRIGATORIO,
					LabelsSistema.PROP_USUARIO_FUNCIONARIO));
		}

		if (StringUtils.isBlank(entidade.getUsername())) {
			erros.add(new MensagemErro(
					MensagensSistema.ERRO_MSG_GERAL_CAMPO_OBRIGATORIO,
					LabelsSistema.PROP_USUARIO_USERNAME));
		}
		boolean pwsOk = false;
		if (StringUtils.isBlank(entidade.getPassword())) {
			erros.add(new MensagemErro(
					MensagensSistema.ERRO_MSG_GERAL_CAMPO_OBRIGATORIO,
					LabelsSistema.PROP_USUARIO_PASSWORD));
		}
		else {
			pwsOk = true;
		}
		boolean pwsConfOk = false;
		if (StringUtils.isBlank(entidade.getSenhaConfirmacao())) {
			erros.add(new MensagemErro(
					MensagensSistema.ERRO_MSG_GERAL_CAMPO_OBRIGATORIO,
					LabelsSistema.PROP_USUARIO_PASSWORD_CONFIRMACAO));
		}
		else {
			pwsConfOk = true;
		}
		if (pwsOk
				&& pwsConfOk
				&& !entidade.getPassword().equals(
						entidade.getSenhaConfirmacao())) {
			erros.add(new MensagemErro(
					MensagensSistema.ERRO_MSG_USUARIO_SENHA_CONTRA_SENHA_DIFERENTES));
		}

		return erros;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.com.skynix.tcmc.service.seguranca.usuarios.UsuarioService#
	 * buscarUsuarioComFuncionario(java.lang.Long)
	 */
	@Override
	@Transactional(readOnly = true)
	public Usuario buscarUsuarioComFuncionario(Long id) {
		Usuario usr = buscarPelaChave(id);
		if (usr.getFuncionario() != null) {
			usr.getFuncionario().getNome().isEmpty();
		}
		return usr;
	}
}
